#if !defined(__APP_BUFFER_H)
#define __APP_BUFFER_H

#include <pthread.h>

// 子缓冲区结构体
typedef struct
{
    unsigned char *buffer; // 内存指针
    int size;     // 内存大小
    int len;      // 已使用的内存大小
} SubBuffer;

// 缓冲区结构体
typedef struct
{
    SubBuffer *sub_buffers[2]; // 子缓冲区指针
    int read_index;           // 读索引
    int write_index;          // 写索引
    pthread_mutex_t read_lock;   // 读锁
    pthread_mutex_t write_lock;   // 写锁
}Buffer;

/**
 * @brief 初始化缓冲区
 * 
 * @param size 子缓冲区大小
 * @return Buffer* 缓冲区指针
 */
Buffer * app_buffer_init(int size);

/**
 * @brief 释放缓冲区
 * 
 * @param buffer 缓冲区指针
 */
void app_buffer_free(Buffer *buffer);

/**
 * @brief 向缓冲区写入数据
 * 
 * @param buffer 缓冲区指针
 * @param data 待写入的数据
 * @param len 待写入的数据长度
 * @return int 判断写入是否成功，成功返回0，失败返回-1
 */
int app_buffer_write(Buffer *buffer, char *data, int len);

/**
 * @brief 从缓冲区读取数据
 * 
 * @param buffer 缓冲区指针
 * @param data 读取到的数据
 * @param size 读取数据容器大小
 * @return int 读取到的数据长度
 */
int app_buffer_read(Buffer *buffer, char *data, int size);

#endif /* __APP_BUFFER_H */